Add an 'Always on Top' item to the csd window menu
authorMatthias Clasen <mclasen@redhat.com>
Sat, 24 Aug 2013 02:46:04 +0000 (22:46 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 24 Aug 2013 02:46:04 +0000 (22:46 -0400)
We want to make the csd window menu as similar as possible to the
mutter window menu.

https://bugzilla.gnome.org/show_bug.cgi?id=706323

gtk/gtkwindow.c

index fec88e8e6ac87210c7889e6855c696c506afe917..aeb13583c9d211c12ff15df7f5c7998ba8e8f649 100644 (file)
@@ -7878,6 +7878,15 @@ maximize_window_clicked (GtkMenuItem *menuitem,
   gtk_window_titlebar_max_clicked (GTK_WIDGET (window), window);
 }
 
+static void
+ontop_window_clicked (GtkMenuItem *menuitem,
+                      gpointer     user_data)
+{
+  GtkWindow *window = (GtkWindow *)user_data;
+
+  gtk_window_set_keep_above (window, !window->priv->above_initially);
+}
+
 static void
 close_window_clicked (GtkMenuItem *menuitem,
                       gpointer     user_data)
@@ -7909,8 +7918,7 @@ gtk_window_do_popup (GtkWindow      *window,
   gtk_widget_show (menuitem);
   if (priv->gdk_type_hint != GDK_WINDOW_TYPE_HINT_NORMAL)
     gtk_widget_set_sensitive (menuitem, FALSE);
-  g_signal_connect (G_OBJECT (menuitem),
-                    "activate",
+  g_signal_connect (G_OBJECT (menuitem), "activate",
                     G_CALLBACK (minimize_window_clicked), window);
   gtk_menu_shell_append (GTK_MENU_SHELL (priv->popup_menu), menuitem);
 
@@ -7919,11 +7927,20 @@ gtk_window_do_popup (GtkWindow      *window,
   if (!priv->resizable ||
       priv->gdk_type_hint != GDK_WINDOW_TYPE_HINT_NORMAL)
     gtk_widget_set_sensitive (menuitem, FALSE);
-  g_signal_connect (G_OBJECT (menuitem),
-                    "activate",
+  g_signal_connect (G_OBJECT (menuitem), "activate",
                     G_CALLBACK (maximize_window_clicked), window);
   gtk_menu_shell_append (GTK_MENU_SHELL (priv->popup_menu), menuitem);
 
+  menuitem = gtk_check_menu_item_new_with_label (_("Always on Top"));
+  gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem),
+                                  priv->above_initially);
+  if (gtk_window_get_maximized (window))
+    gtk_widget_set_sensitive (menuitem, FALSE);
+  gtk_widget_show (menuitem);
+  g_signal_connect (G_OBJECT (menuitem), "activate",
+                    G_CALLBACK (ontop_window_clicked), window);
+  gtk_menu_shell_append (GTK_MENU_SHELL (priv->popup_menu), menuitem);
+
   menuitem = gtk_separator_menu_item_new ();
   gtk_widget_show (menuitem);
   gtk_menu_shell_append (GTK_MENU_SHELL (priv->popup_menu), menuitem);
@@ -7932,8 +7949,7 @@ gtk_window_do_popup (GtkWindow      *window,
   gtk_widget_show (menuitem);
   if (!priv->deletable)
     gtk_widget_set_sensitive (menuitem, FALSE);
-  g_signal_connect (G_OBJECT (menuitem),
-                    "activate",
+  g_signal_connect (G_OBJECT (menuitem), "activate",
                     G_CALLBACK (close_window_clicked), window);
   gtk_menu_shell_append (GTK_MENU_SHELL (priv->popup_menu), menuitem);